
//获取地址栏参数
export const GetQueryString = (name) => {
  var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
  var r = window.location.search.substr(1).match(reg);
  if(r!=null)return unescape(decodeURI(r[2])); return null;
}

/**
 * 格式化日期
 * @param value 日期时间
 * @param fmt 格式
 */
export const crtTimeFtt = (value, fmt) => {
  fmt = fmt || 'YYYY-MM-DD';
  if (value){
    if (typeof value === 'string'){
      value = value.replace(/-/g,'/');
      let date = new Date(value);
      return formatDate(date,fmt);
    }
    if (typeof value === 'number'){
      let date = new Date(value);
      return formatDate(date,fmt);
    }
    if (typeof value === 'object'){
      return formatDate(value,fmt)
    }
  }
  return formatDate(new Date(),fmt);
};
/**
 * 格式化日期时间格式
 * @param {Date} date 日期时间对象
 * @param {String} fmt 格式
 */
export const formatDate = (date, fmt) => {
  const o = {
    'M+': date.getMonth() + 1,  //月份
    'D+': date.getDate(),   //日期
    'H+': date.getHours(),  //时
    'm+': date.getMinutes(),  //分
    's+': date.getSeconds(),  //秒
    'q+': Math.floor((date.getMonth() + 3) / 3),  // 季度
    'S': date.getMilliseconds(),    // 毫秒
  }

  if (/(Y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, o[k].toString().length === 1 ? '0' + o[k] : o[k])
    }
  }
  return fmt;

}


/**
 * 图片文件压缩
 * @param file
 * @description
 *  1、将文件转img对象
 *  2、获取文件宽高比例
 *  3、自定义等比例缩放宽高属性，这里我用的是固定800宽度，高度是等比例缩放
 *  4、canvas重新绘制图片
 *  5、canvas转二进制对象转文件对象，返回

 * @return {Promise<*>}
 */
export const imgCompress = async file => {
  const img = await file2Img(file);
  return new Promise((resolve,reject) => {
    const canvas = document.createElement('canvas'),
      context = canvas.getContext('2d');
    //  获取文件宽高比例
    const {width: originWidth, height: originHeight} = img;
    //  自定义等比例缩放宽高属性， 固定面积220000，宽度高度等比例缩放
    const scale = +(originWidth /originHeight).toFixed(2) //比例取小数点后两位
    const s = 307200,
      targetWidth = Math.round(Math.sqrt(scale * s)),
      targetHeight = Math.round(targetWidth / scale);

    canvas.width = targetWidth
    canvas.height = targetHeight
    context.clearRect(0, 0, targetWidth, targetHeight)
    // canvas重新绘制图片
    context.drawImage(img, 0, 0, targetWidth, targetHeight)

    // canvas转二进制对象转文件对象，返回
    const type = 'image/png'
    canvas.toBlob(blob => {
      const f = new File([blob], file.name, {
        type,
        lastModified: file.lastModified
      })
      resolve(f)
    }, type)


  })
}

/**
 * 图片file转化成img对象
 * @param file
 * @return {Promise<any>}
 */
export const  file2Img = (file) => {
  return new Promise((resolve,reject) => {
    const img = new Image(),
      reader = new FileReader();
    reader.onload = e => img.src = e.target.result;
    reader.onerror = e => reject(e);
    reader.readAsDataURL(file);
    img.onload = () => resolve(img);
    img.onerror = (e) => reject(e);
  })
}


/**
 * 字符串转base64
 * @param str
 * @return {string}
 */
export const str2Base64 = (str) => {
  return btoa(encodeURI(str));
}
/**
 * base64转字符串
 * @param base64
 * @return {string}
 */
export const base642Str = (base64) => {
  return decodeURI(atob(base64));
}
